package com.zgh.interceptor;//package com.zgh.interceptor;
//
//import java.io.IOException;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.util.List;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import com.baomidou.kisso.security.token.SSOToken;
//import com.xxg.base.module.Operater;
//import com.xxg.exception.BaseException;
//import com.xxg.util.SystemConstant;
//import com.xxg.util.SystemProperty;
//import com.zgh.cache.RedisCache;
//import com.zgh.rbac.module.Menu;
//import com.zgh.rbac.service.RbacProxy;
//
//
//public class SSOInterceptor extends HandlerInterceptorAdapter {
//
//	@Autowired
//	private  RedisCache redisCache;
//	@Autowired
//	private RbacProxy rbacProxy;
//
//	@Override
//	public boolean preHandle(HttpServletRequest request,
//			HttpServletResponse response, Object handler) throws Exception {
//		HttpSession session=request.getSession();
//		String loginKey=(String)session.getAttribute(SystemConstant.SESSION_LOGIN_KEY);
//		//没有登录，不用检查，直接放行
//		if(StringUtils.isBlank(loginKey)){
//			return true;
//		}
//		//如果已经登录，则需要更新缓存中登录主键的留存时间，以便会话保持
//		SSOToken ssoToken =redisCache.getObj(loginKey, SSOToken.class);
//		 //会话已经过期，需要重新登录
//    	if(ssoToken==null || StringUtils.isBlank(ssoToken.getIssuer())){
//    		session.removeAttribute(SystemConstant.SESSION_USER_KEY);
//    		session.removeAttribute(SystemConstant.SESSION_LOGIN_KEY);
//    		session.removeAttribute(SystemConstant.SESSION_LOGIN_COUNT);
//    		session.removeAttribute(SystemConstant.SESSION_MENU_ALL);
//    		session.removeAttribute(SystemConstant.SESSION_MENU_TITLES);
//    		session.removeAttribute(SystemConstant.SESSION_MENU_FIRSTS);
//    		return toLogin(request, response);
//    	}
//    	if(ssoToken.getJwtBuilder()!=null && ssoToken.getJwtBuilder().toString().equals("{}")){
//			ssoToken.setJwtBuilder(null);
//		}
//    	Operater operater=(Operater)session.getAttribute(SystemConstant.SESSION_USER_KEY);
//    	if(operater!=null && operater.getUserId()>0){
//    		ssoToken.setData(null);
//    	}
//    	long sessionTimeout=7200;
//    	if(StringUtils.isNotBlank(SystemProperty.getProperty("ssoCacheExpires"))){
//    		sessionTimeout=Long.valueOf(SystemProperty.getProperty("ssoCacheExpires"));
//    	}
//    	if("rememberMe".equals(ssoToken.getToken())){
//    		redisCache.setObjExp(loginKey, ssoToken, 604800L);
//    	}else{
//    		redisCache.setObjExp(loginKey, ssoToken, sessionTimeout);
//    	}
//
//    	//如果已经登录，则还需要检查功能权限
//    	if(!checkPower(request, response)){
//    		throw new BaseException(BaseException.NO_POWER,
//    				BaseException.NO_POWER_MESSAGE);
//    	}
//
//    	return true;
//	}
//
//	@SuppressWarnings("unchecked")
//	private boolean checkPower(HttpServletRequest request,HttpServletResponse response){
//		if("1".equals(request.getAttribute("NoSSOInterceptor"))){
//			return true;
//		}
//		String path=request.getServletPath();
//		if(StringUtils.isBlank(path)){
//			return true;
//		}
//
//		if(path.startsWith("/")){
//			path=path.substring(1);
//		}
//
//		if(StringUtils.isBlank(path)){
//			return true;
//		}
//
//		List<Menu> menus=(List<Menu>)request.getSession().getAttribute(SystemConstant.SESSION_MENU_ALL);
//		if(menus!=null && !menus.isEmpty()){
//			for(Menu menu:menus){
//				if(path.equals(menu.getUrl())){
//					request.setAttribute("powerOrganizationCodes", menu.getPowerOrganizationCodes());
//					request.setAttribute("powerUserIds", menu.getPowerUserIds());
//					return true;
//				}
//			}
//		}
//
//		List<Menu> list=rbacProxy.listAllMenu(SystemProperty.getProperty("systemMenuFlag"),"1");
//		if(list==null || list.isEmpty()){
//			return false;
//		}
//		for(Menu menu:list){
//			 if(path.equals(menu.getUrl())){
//				 return false;
//			 }
//		}
//		return true;
//	}
//
//
//	private boolean toLogin(HttpServletRequest request,HttpServletResponse response) throws IOException{
//		//组装loginUrl
//		String loginUrl=request.getContextPath()+"/login.action?ssoReturnURL=";
//		String returnURL=request.getServletPath();
//		String queryString=request.getQueryString();
//		if(StringUtils.isNotBlank(queryString)){
//			returnURL=returnURL+"?"+queryString;
//		}
//		try{
//			loginUrl=loginUrl+URLEncoder.encode(returnURL,"utf-8");
//		}catch(UnsupportedEncodingException ex){
//
//		}
//		response.sendRedirect(loginUrl);
//		return false;
//	}
//
//}
